import axios from 'axios'
import {projectName} from '../constant/constant.js';
import {Loading, Message} from 'element-ui'
import {getSession } from '../utils/MUtils';
import { URL_WHITELIST } from '../constant/constant';



axios.defaults.withCredentials = true;
// 必须是/开头,否则会变成lim/api/lim
axios.defaults.baseURL = '/api/lim';

let instance = axios.create();
let loginPage = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) == null?'Login':'MLogin'
instance.interceptors.request.use(
  config => {
    const token = getSession(projectName + "Token");
    // const token = window.sessionStorage.getItem(projectName + "Token")
    if (token) { // 判断是否存在token，如果存在的话，则每个http header都加上token
      config.headers.token = token  //请求头加上token
    } else {
      // debugger
      // 没有token跳转到登录页
      //   router.replace("/Login")
      // window.location = '/Login';
      if (URL_WHITELIST.indexOf(config.url) === -1) {
        window.location = '/lim/#/Login';
      }
    }
    return config
  },
  err => {
    // loadinginstace.close()
    console.error("instance.interceptors.request.err", err);
    Message.error({message: '加载超时'});
    return Promise.reject(err)
  },
);
instance.interceptors.response.use(
  response => {
    // loadinginstace.close()

    // debugger
    let data = response.data;
    let message = data.message;
    if (data.success) {
      if (message != null) {
        Message.success({message: message,center:true})
      }
    }else{
      // 请求成功了,但是业务处理失败了
      if (message != null) {
        Message.error({message: message})
      }
      // token验证不通过跳转到登录页
      // if (response.data.code == 403) {
      //   router.replace("/Login")
      // }
      if (response.data.code === 403) {
        // window.location = 'http://localhost:8080/#/Login';
        window.location = '/lim/#/'+loginPage;
      }
    }
    return response
  },
  err => {
    console.error("instance.interceptors.response.use.err", err);
    // loadinginstace.close()
    Message.error({message: '加载失败'});
    return Promise.reject(err)
  },
);
export default function ajax(url, data = {}, type = 'GET', config = {}) {
  if (data === null) {
    data = {};
  }
  type = type.toUpperCase();
  if (type === 'GET') {
    // 准备url query参数数据
    let dataStr = ''; //数据拼接字符串
    Object.keys(data).forEach(key => {
      dataStr += key + '=' + data[key] + '&'
    });
    if (dataStr !== '') {
      dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'));
      url = url + '?' + dataStr
    }
  }
  let requestConfig = {
    // `url` 是用于请求的服务器 URL
    url,
    // `method` 是创建请求时使用的方法
    method: type, // default
    // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
    // baseURL: 'https://some-domain.com/api/',
    // `headers` 是即将被发送的自定义请求头
    headers: config.headers,
    // `params` 是即将与请求一起发送的 URL 参数
    params: config.params,
    // `data` 作为请求主体被发送的数据,只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
    data: data,
    // `timeout` 指定请求超时的毫秒数(0 表示无超时时间),如果请求时间超过 `timeout` ，请求将被中断
    timeout: 0,
    // `responseType` 表示服务器响应的数据类型，可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
    responseType: 'json', // default
    // `responseEncoding` indicates encoding to use for decoding responses
    // Note: Ignored for `responseType` of 'stream' or client-side requests
    responseEncoding: 'utf8', // default
    // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
    xsrfCookieName: 'XSRF-TOKEN', // default
    // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
    xsrfHeaderName: 'X-XSRF-TOKEN', // default
  };
  return new Promise(function (resolve, reject) {
    instance.request(requestConfig).then(function (response) {
      // 成功了调用resolve()
      resolve(response.data)
    }).catch(function (error) {
      console.error("error", error);
      //失败了调用reject()
      reject(error)
    })
  })
}
